SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


CREATE PROCEDURE [dbo].[LIQEstimulo]
@Agente INT,
@Servicio INT,
@Plaza INT,
@Resultado DECIMAL(18,4) OUTPUT,
@idLiquidacion INT,
@DiasALiquidar INT
AS 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- LOS AGENTES QUE NO LES CORRESPONDE EL ESTIMULO SIGUEN SALIENDO... HAY QUE RESTAR LOS ESTIMOS
-- DE LOS AGENTES QUE APARECEN EN ESTA TABLA
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SET NOCOUNT ON

SET DATEFORMAT DMY

DECLARE @MontoEstimulo DECIMAL(18,4)
DECLARE @TotalRemunerativo DECIMAL(18,4)
DECLARE @Afiliacion INT, @regimensalarial  INT, @organizacion INT, @situacionrevista INT
DECLARE @DescAporte DECIMAL(18,4)
DECLARE @NroError INT
DECLARE @SubOrganizacion INT
DECLARE @CargoSalarial INT, @Porcentaje INT, @Estimulo DECIMAL(18,4), @Horas INT, @TotalEstimulo DECIMAL(18,4), @TotalEstimuloEstado DECIMAL(18,4), @EstimuloTemporal DECIMAL(18,4)
DECLARE @Hasta Datetime, @Desde Datetime
DECLARE @SueldoBasico DECIMAL(18,4)
DECLARE @diasPeriodo INT
DECLARE @EstimuloNoEducativo DECIMAL(18,4)

SELECT @Hasta = Hasta, @Desde = Desde FROM tb_Liquidaciones WHERE IdLiquidacion = @idLiquidacion

SELECT @Estimulo = 0.0, @EstimuloTemporal = 0.0, @TotalEstimulo = 0.0, @TotalEstimuloEstado = 0.0, @EstimuloNoEducativo = 0.0

-- Total del Estimulo que se viene liquidando
SELECT @TotalEstimulo = IsNull(Sum(MontoHaberes),0.0) FROM tb_RegistroDeLiquidaciones R
Inner Join tb_Liquidaciones  L On idLiquidacion = Liquidacion
WHERE Concepto = 33 And R.Agente = @Agente And L.Hasta = @Hasta
If @TotalEstimulo Is Null
	SELECT @TotalEstimulo = 0.0

-- Total del Estimulo que se liquido desde el estado
SELECT @TotalEstimuloEstado = IsNull(Monto,0.0) FROM EstimuloDeDocentes WHERE Agente = @Agente
If @TotalEstimuloEstado Is Null
	SELECT @TotalEstimuloEstado = 0.0

-- Total del Estimulo que se le liquido desde el estado fuera del sistema educativo
SELECT @MontoEstimulo = 128.80

SELECT @CargoSalarial = CargoSalarial, @Horas = Horas FROM tb_ServiciosAgentes WHERE idServicioAgente = @Servicio

SELECT @Porcentaje = Porcentaje FROM tb_PorcentajesDeEstimulo WHERE idCargo = @CargoSalarial

SELECT @SueldoBasico = MontoHaberes FROM tb_RegistroDeLiquidaciones WHERE Concepto = 4 And Servicio = @Servicio And Liquidacion = @idLiquidacion

SELECT @EstimuloNoEducativo = ISNULL(Sum(Monto),0.0) FROM tb_AgentesConEstimulo WHERE Agente = @Agente
If @EstimuloNoEducativo Is Null
	SELECT @EstimuloNoEducativo = 0.0

If @EstimuloNoEducativo Is Null
	SELECT @EstimuloNoEducativo = 0.0

If @Porcentaje Is Null
	SELECT @Estimulo = @MontoEstimulo
Else	
	SELECT @Estimulo = (@MontoEstimulo * @Porcentaje) / 100

If @CargoSalarial In (2901, 3001)
	SELECT @Estimulo = (@Horas * @MontoEstimulo) / 15

If @CargoSalarial In (4001)
	SELECT @Estimulo = (@Horas * @MontoEstimulo) / 12	

SELECT @TotalEstimulo = @TotalEstimulo + @TotalEstimuloEstado

If @TotalEstimuloEstado = @MontoEstimulo --Or @TotalEstimulo = 120
	SELECT @Estimulo = 0.0
ELSE
BEGIN
	IF (@TotalEstimuloEstado + @TotalEstimulo) < @MontoEstimulo
	BEGIN
		IF (@TotalEstimuloEstado + @TotalEstimulo + @Estimulo) > @MontoEstimulo
		BEGIN
			SELECT @EstimuloTemporal = @MontoEstimulo - (@TotalEstimuloEstado + @TotalEstimulo)
			IF @EstimuloTemporal < @Estimulo
				SELECT @Estimulo = @EstimuloTemporal
		END
	END
	ELSE
		SELECT @Estimulo = 0.0
END

SELECT @diasPeriodo = datediff(day,@desde,@hasta)
SELECT @Estimulo = (@DiasALiquidar * @Estimulo) /  @diasPeriodo

SELECT @Afiliacion = idAfiliacion FROM tb_Afiliaciones WHERE idAgente = @Agente
SELECT @horas= horas, @regimensalarial = regimensalarial, @SubOrganizacion = SubOrganizacion FROM tb_Plazas WHERE idPlaza = @Plaza
SELECT @Organizacion = ubicacionOrig, @SituacionRevista = SituacionRevista FROM tb_ServiciosAgentes WHERE idservicioAgente =  @Servicio

If (SELECT OrganizacionLiquidadora FROM tb_SubOrganizaciones WHERE idSubOrganizacion = @SubOrganizacion) Is Not Null
	SELECT @Organizacion = OrganizacionLiquidadora FROM tb_SubOrganizaciones WHERE idSubOrganizacion = @SubOrganizacion

If @SueldoBasico > 0
BEGIN
	--SELECT @Estimulo = (MontoHaberes * 112.0 / 128.80) FROM tb_RegistroDeLiquidaciones
	--Inner Join tb_Liquidaciones L On IdLiquidacion = Liquidacion
	--WHERE Servicio = @Servicio And Concepto = 33 And L.Hasta = '14/10/2004'

	INSERT INTO tb_RegistroDeLiquidaciones (AfectadosPorAjuste, Afiliacion, Agente, Ajuste, Cantidad, Cargosalarial, Concepto, Descripcion, DescuentoExterno, Desde, Dias, Embargo, Hasta, Horas, LegajoSalarial, Liquidacion, MontoDescuento, MontoHaberes, Organizacion, Reclamado, Servicio, SituacionRevista, DiasLiquidados, SubOrganizacion)
	VALUES (null, @Afiliacion, @Agente, null, 1, null, 33, null, null, null, null, null, null, @horas, 0, @idLiquidacion, 0, @Estimulo, @Organizacion, null, @Servicio, @SituacionRevista, @diasALiquidar, @SubOrganizacion)
END

SELECT @NroError = @@error

if @NroError <> 0
	INSERT INTO tb_ErroresLiquidacion (Agente, Concepto, Diagnostico, Fecha, Liquidacion, Organizacion, Servicio) values
	(@Agente, 33, convert(varchar,@NroError), getdate(), @idLiquidacion, @Organizacion, @Servicio)

GO
